package persistencia;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Hashtable;
import java.util.Iterator;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import logica.Arma;
import logica.Bando;
import logica.Barco;
import logica.DanioArma;
import logica.Disparo;
import logica.Juego;
import logica.Jugador;
import logica.Puerto;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import auxiliares.Coordenada;
import auxiliares.Global;
import excepciones.JuegoException;

public class XML {

	public XML() {
		
	}
	
	public void guardarJuego(Juego _juego) throws IOException {
		String xml = 
			"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
			"<PartidaGuardada>" +
			"<Juego>" +
			"<Nombre>" + _juego.getNombre() + "</Nombre>" +
			"<Codigo>" + _juego.getCodigoJuego() + "</Codigo>" +
			"<CantidadJugadores>" + _juego.getCantidadJugadores() + "</CantidadJugadores>" +
			"<CreadorPartida>" + _juego.getCreadorPartida() + "</CreadorPartida>" +
			"<NivelDificultad>" + _juego.getNivelDificultad() + "</NivelDificultad>";
		xml += "<Disparos>"+
			   "<CantDisparos>" + _juego.getCantidadDisparos() + "</CantDisparos>";
		Iterator<Disparo> disparos = _juego.getDisparos();
		while(disparos.hasNext()){
			xml += "<Disparo>" + disparos.next().getXML() + "</Disparo>"; 
		}
		xml += "</Disparos>";
		xml += "<Puertos>";
		Iterator<Puerto> puertos = _juego.getPuertos();
		while (puertos.hasNext()) {
			xml += "<Puerto>" + puertos.next().getXML() + "</Puerto>"; 
		}
		xml += "</Puertos>";
		xml += "<Jugadores>";
		Iterator<Jugador> jugadores = _juego.getJugadores();
		while (jugadores.hasNext()) {
			xml += "<Jugador>" + jugadores.next().getXML() + "</Jugador>";
		}
		xml += "</Jugadores></Juego></PartidaGuardada>";
	
		OutputStream fout = new FileOutputStream(Global.getInstance().getProperty(Global.SILVER_RIVER_PATH) + "xmlGuardar/" + _juego.getCodigoJuego() + ".xml");
		OutputStream bout = new BufferedOutputStream(fout);
		OutputStreamWriter out = new OutputStreamWriter(bout, "UTF-8");
		out.write(xml);
		out.flush();
		out.close();
	}
	
	/*------------------------------------------------------------------------------------
	 * Metodo: cargarPartida
	 * Descripcion: carga la partida desde un xml, reestableciendo todos los datos de la misma
	 * Entrada: 
	 * Salida: XML
	 * Autor: Maximliano Anastasiadis
	 * -----------------------------------------------------------------------------------
	 */	
	public void cargarPartida(Juego juego) throws ParserConfigurationException, SAXException, JuegoException, IOException {
		
		String nombreJugador= "";
		String nombreBando = "";
        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
 
        Document doc = docBuilder.parse (new File(Global.getInstance().getProperty(Global.SILVER_RIVER_PATH) + "xmlGuardar/" +juego.getCodigoJuego()+".xml"));

        doc.getDocumentElement ().normalize ();

        NodeList listaPartidas = doc.getElementsByTagName("Juego");
        int totalPartidas = listaPartidas.getLength();

        Element tercerAtributo;
        
        for (int s = 0; s < listaPartidas.getLength() ; s++) {
            Node primerJuego = listaPartidas.item(s);
            if(primerJuego.getNodeType() == Node.ELEMENT_NODE){
                Element firstPersonElement = (Element)primerJuego;

                //-------
                NodeList Nombre = firstPersonElement.getElementsByTagName("Nombre");
                Element primerAtributo = (Element)Nombre.item(0);

                NodeList name = primerAtributo.getChildNodes();
                //SETEO NOMBRE JUEGO
                juego.setNombre(name.item(0).getNodeValue().trim());

                //-------
                NodeList Codigo = firstPersonElement.getElementsByTagName("Codigo");
                Element segundoAtributo = (Element)Codigo.item(0);

                NodeList code = segundoAtributo.getChildNodes();
                //SETEO CODIGO PARTIDA
                juego.setCodigoJuego(code.item(0).getNodeValue().trim());
                //----
                NodeList NivelDificultad = firstPersonElement.getElementsByTagName("NivelDificultad");
                Element quintoAtributo = (Element)NivelDificultad.item(0);

                NodeList level = quintoAtributo.getChildNodes();
                //SETEO NIVEL DIFICULTAD
                juego.setNivelDificultad(Integer.parseInt(level.item(0).getNodeValue().trim()));

                //------
                
                //----
                NodeList CreadorPartida = firstPersonElement.getElementsByTagName("CreadorPartida");
                Element sextoAtributo = (Element)CreadorPartida.item(0);

                NodeList creador = sextoAtributo.getChildNodes();
                //SETEO NIVEL CREADOR PARTIDA
                nombreJugador = creador.item(0).getNodeValue().trim();
                juego.setCreadorPartida(creador.item(0).getNodeValue().trim());
                
                NodeList listaDisparos = doc.getElementsByTagName("Disparo");
                int totalDisparos = listaDisparos.getLength();
                
                for(int j=0; j<listaDisparos.getLength() ; j++){

                    Node primerDisparo = listaDisparos.item(j);
                    if(primerDisparo.getNodeType() == Node.ELEMENT_NODE){	

                        Element firstPortElement = (Element)primerDisparo;

                        //-------
                        NodeList NombreBarco = firstPortElement.getElementsByTagName("NombreBarco");
                        primerAtributo = (Element)NombreBarco.item(0);

                        NodeList nameBoat = primerAtributo.getChildNodes();
                        String _nameBoat =nameBoat.item(0).getNodeValue().trim();
                        //-------
                        
                        NodeList CodigoArma = firstPortElement.getElementsByTagName("CodigoArma");
                        segundoAtributo = (Element)CodigoArma.item(0);

                        NodeList codeArma = segundoAtributo.getChildNodes();
                        int _codeArma =Integer.parseInt(codeArma.item(0).getNodeValue().trim());
                        //----
                        NodeList DestinoX = firstPortElement.getElementsByTagName("DestinoX");
                        tercerAtributo = (Element)DestinoX.item(0);

                        NodeList destX = tercerAtributo.getChildNodes();
                        int _destX =Integer.parseInt(destX.item(0).getNodeValue().trim());
                        //------      
                        
                        NodeList DestinoY = firstPortElement.getElementsByTagName("DestinoY");
                        tercerAtributo = (Element)DestinoY.item(0);

                        NodeList destY = tercerAtributo.getChildNodes();
                        int _destY =Integer.parseInt(destY.item(0).getNodeValue().trim());
                        //------
                        Coordenada _destino = new Coordenada(_destX, _destY);
                        
                        NodeList OrigenX = firstPortElement.getElementsByTagName("OrigenX");
                        tercerAtributo = (Element)OrigenX.item(0);

                        NodeList origX = tercerAtributo.getChildNodes();
                        int _origX =Integer.parseInt(origX.item(0).getNodeValue().trim());
                        
                        //----
                        
                        NodeList OrigenY = firstPortElement.getElementsByTagName("OrigenY");
                        tercerAtributo = (Element)OrigenY.item(0);

                        NodeList origY = tercerAtributo.getChildNodes();
                        int _origY =Integer.parseInt(origY.item(0).getNodeValue().trim());
                        Coordenada _origen = new Coordenada(_origX, _origY);
                        //------   
                        //CREAMOS DISPARO
                        Disparo disparo = new Disparo(_nameBoat, _codeArma, _origen, _destino);
                        //SETEO EL PUERTO
                        juego.agregarDisparoActivo(disparo);
                        //------   
                    }//end of if clause
                }//end of for loop with s var                    
                
                NodeList listaPuertos = doc.getElementsByTagName("Puerto");
                int totalPuertos = listaPuertos.getLength();
                
                for(int j=0; j<listaPuertos.getLength() ; j++){

                    Node primerPuerto = listaPuertos.item(j);
                    if(primerPuerto.getNodeType() == Node.ELEMENT_NODE){	

                        Element firstPortElement = (Element)primerPuerto;

                        //-------
                        NodeList IdPuerto = firstPortElement.getElementsByTagName("IdPuerto");
                        primerAtributo = (Element)IdPuerto.item(0);

                        NodeList id = primerAtributo.getChildNodes();
                        int _idPuerto =Integer.parseInt(id.item(0).getNodeValue().trim());
                        //-------
                        
                        NodeList Largo = firstPortElement.getElementsByTagName("Largo");
                        segundoAtributo = (Element)Largo.item(0);

                        NodeList large = segundoAtributo.getChildNodes();
                        int _largo =Integer.parseInt(large.item(0).getNodeValue().trim());
                        //----

                        NodeList Ancho = firstPortElement.getElementsByTagName("Ancho");
                        segundoAtributo = (Element)Ancho.item(0);

                        NodeList wide = segundoAtributo.getChildNodes();
                        int _ancho =Integer.parseInt(wide.item(0).getNodeValue().trim());
                        //----
                        NodeList LimiteReparaciones = firstPortElement.getElementsByTagName("LimiteReparaciones");
                        tercerAtributo = (Element)LimiteReparaciones.item(0);

                        NodeList limit = tercerAtributo.getChildNodes();
                        int _limiteReparaciones =Integer.parseInt(limit.item(0).getNodeValue().trim());
                        //------      
                        
                        NodeList CoordX = firstPortElement.getElementsByTagName("CoordX");
                        tercerAtributo = (Element)CoordX.item(0);

                        NodeList coordX = tercerAtributo.getChildNodes();
                        int posX =Integer.parseInt(coordX.item(0).getNodeValue().trim());
                        //------
                        
                        NodeList CoordY = firstPortElement.getElementsByTagName("CoordY");
                        tercerAtributo = (Element)CoordY.item(0);

                        NodeList coordY = tercerAtributo.getChildNodes();
                        int posY =Integer.parseInt(coordY.item(0).getNodeValue().trim());
                        Coordenada _posicion = new Coordenada(posX, posY);
                        //------   
                        
                        NodeList Ocupado = firstPortElement.getElementsByTagName("Ocupado");
                        tercerAtributo = (Element)Ocupado.item(0);

                        NodeList ocupado = tercerAtributo.getChildNodes();
                        boolean _ocupado =Boolean.parseBoolean(ocupado.item(0).getNodeValue().trim());
                        //--------
                        
                        NodeList ReparBlindaje = firstPortElement.getElementsByTagName("ReparBlindaje");
                        tercerAtributo = (Element)ReparBlindaje.item(0);

                        NodeList repBlind = tercerAtributo.getChildNodes();
                        int _reparBlindaje =Integer.parseInt(repBlind.item(0).getNodeValue().trim());
                        //------   

                        NodeList ReparVelocidad = firstPortElement.getElementsByTagName("ReparVelocidad");
                        tercerAtributo = (Element)ReparVelocidad.item(0);

                        NodeList repVel = tercerAtributo.getChildNodes();
                        int _reparVelocidad =Integer.parseInt(repVel.item(0).getNodeValue().trim());
                        //------   
                       
                        NodeList DanioAlcance = firstPortElement.getElementsByTagName("DanioAlcance");
                        tercerAtributo = (Element)DanioAlcance.item(0);

                        NodeList danioAlca = tercerAtributo.getChildNodes();
                        int repAlcance =Integer.parseInt(danioAlca.item(0).getNodeValue().trim());
                        //------     

                        NodeList DanioCantMuniciones = firstPortElement.getElementsByTagName("DanioCantMuniciones");
                        tercerAtributo = (Element)DanioCantMuniciones.item(0);

                        NodeList danioCantMuni = tercerAtributo.getChildNodes();
                        int reparCantMuni =Integer.parseInt(danioCantMuni.item(0).getNodeValue().trim());
                        DanioArma _reparArma = new DanioArma(repAlcance, reparCantMuni);
                        //CREAMOS PUERTO
                        Puerto puerto = new Puerto(_posicion, _largo, _ancho, _idPuerto, _reparArma, _reparBlindaje, _reparVelocidad, _limiteReparaciones, _ocupado);
                        //SETEO EL PUERTO
                        juego.setPuerto(puerto);
                        //------   
                    }//end of if clause
                }//end of for loop with s var
                
                NodeList listaJugadores = doc.getElementsByTagName("Jugador");
                int totalJugadores = listaJugadores.getLength();

                for(int j=0; j<listaJugadores.getLength() ; j++){
                	
                    Node primerJugador = listaJugadores.item(j);
                    if(primerJugador.getNodeType() == Node.ELEMENT_NODE){

                        Element firstPlayerElement = (Element)primerJugador;
                        
                        //-------
                        NodeList NombreJugador = firstPlayerElement.getElementsByTagName("NombreJugador");
                        primerAtributo = (Element)NombreJugador.item(0);

                        NodeList namePlayer = primerAtributo.getChildNodes();
                        String _nombreJugador = namePlayer.item(0).getNodeValue().trim();

                        //-------
                        NodeList Idioma = firstPlayerElement.getElementsByTagName("Idioma");
                        segundoAtributo = (Element)Idioma.item(0);

                        NodeList language = segundoAtributo.getChildNodes();
                        String _idiomaJugador = language.item(0).getNodeValue().trim();
                        //------
                        //CREO BANDO
                        Bando bando = new Bando();
                        
                        NodeList NombreBando = firstPlayerElement.getElementsByTagName("NombreBando");
                        segundoAtributo = (Element)NombreBando.item(0);
                        
                        NodeList nameBando = segundoAtributo.getChildNodes();
                        String _nombreBando = nameBando.item(0).getNodeValue().trim();
                        
                        if(nombreJugador.equalsIgnoreCase(_nombreJugador)){
                        	nombreBando=_nombreBando;
                        }
                        //SETEO NOMBRE BANDO
                    	bando.setNombreBando(_nombreBando);
                        //------
                        NodeList CantBarcos = firstPlayerElement.getElementsByTagName("CantBarcos");
                        segundoAtributo = (Element)CantBarcos.item(0);
                        
                        NodeList cantBarcos = segundoAtributo.getChildNodes();

                        //------
                        
                        NodeList listaBarcos = doc.getElementsByTagName("Barco"+
                        						((Node)nameBando.item(0)).getNodeValue().trim());
                        int totalBarcos = listaBarcos.getLength();

                        for(int l=0; l<listaBarcos.getLength() ; l++){
                        
                            Node primerBarco = listaBarcos.item(l);
                            if(primerBarco.getNodeType() == Node.ELEMENT_NODE){

                                Element firstBarcoElement = (Element)primerBarco;

                                //-------
                                NodeList NombreBarco = firstBarcoElement.getElementsByTagName("NombreBarco");
                                primerAtributo = (Element)NombreBarco.item(0);

                                NodeList nameBarco = primerAtributo.getChildNodes();
                                String _nombre = nameBarco.item(0).getNodeValue().trim();

                                //-------
                                NodeList IdTipoBarco = firstBarcoElement.getElementsByTagName("IdTipoBarco");
                                segundoAtributo = (Element)IdTipoBarco.item(0);

                                NodeList idTipoBarco = segundoAtributo.getChildNodes();
                                int _idTipoBarco = Integer.parseInt(idTipoBarco.item(0).getNodeValue().trim());
                                //------
                                NodeList Largo = firstBarcoElement.getElementsByTagName("Largo");
                                segundoAtributo = (Element)Largo.item(0);

                                NodeList largo = segundoAtributo.getChildNodes();
                                int _largo = Integer.parseInt(largo.item(0).getNodeValue().trim());
                                //------

                                
                                NodeList Ancho = firstBarcoElement.getElementsByTagName("Ancho");
                                segundoAtributo = (Element)Ancho.item(0);

                                NodeList ancho = segundoAtributo.getChildNodes();
                                int _ancho = Integer.parseInt(ancho.item(0).getNodeValue().trim());
                                //------

                                
                                NodeList Visibilidad = firstBarcoElement.getElementsByTagName("Visibilidad");
                                segundoAtributo = (Element)Visibilidad.item(0);

                                NodeList visibilidad = segundoAtributo.getChildNodes();
                                int _areaVisibilidad = Integer.parseInt(visibilidad.item(0).getNodeValue().trim());
                                //------

                                NodeList BlindajeActual = firstBarcoElement.getElementsByTagName("BlindajeActual");
                                segundoAtributo = (Element)BlindajeActual.item(0);

                                NodeList blindaje = segundoAtributo.getChildNodes();
                                int _blindajeActual = Integer.parseInt(blindaje.item(0).getNodeValue().trim());
                                //------
                     
                                NodeList VelocidadActual = firstBarcoElement.getElementsByTagName("VelocidadActual");
                                segundoAtributo = (Element)VelocidadActual.item(0);

                                NodeList velocidad = segundoAtributo.getChildNodes();
                                int _velocidadActual = Integer.parseInt(velocidad.item(0).getNodeValue().trim());
                                //------

                                NodeList SentidoPosicion = firstBarcoElement.getElementsByTagName("SentidoPosicion");
                                segundoAtributo = (Element)SentidoPosicion.item(0);

                                NodeList posicion = segundoAtributo.getChildNodes();
                                int _sentidoPosicion = Integer.parseInt(posicion.item(0).getNodeValue().trim());
                                //------

                                NodeList Vida = firstBarcoElement.getElementsByTagName("Vida");
                                segundoAtributo = (Element)Vida.item(0);

                                NodeList vida = segundoAtributo.getChildNodes();
                                int _vida = Integer.parseInt(vida.item(0).getNodeValue().trim());
                                //------
                                NodeList PosX = firstBarcoElement.getElementsByTagName("PosX");
                                segundoAtributo = (Element)PosX.item(0);

                                NodeList posX = segundoAtributo.getChildNodes();
                                int posicionX = Integer.parseInt(posX.item(0).getNodeValue().trim());
                                //------
                                NodeList PosY = firstBarcoElement.getElementsByTagName("PosY");
                                segundoAtributo = (Element)PosY.item(0);

                                NodeList posY = segundoAtributo.getChildNodes();
                                int posicionY = Integer.parseInt(posY.item(0).getNodeValue().trim());
                                //------
                                Coordenada _posicion = new Coordenada(posicionX, posicionY);
                                
                                NodeList MovimientoHabilitado= firstBarcoElement.getElementsByTagName("MovimientoHabilitado");
                                segundoAtributo = (Element)MovimientoHabilitado.item(0);

                                NodeList movHab = segundoAtributo.getChildNodes();
                                boolean _movimientoHabilitado = Boolean.parseBoolean(movHab.item(0).getNodeValue().trim());
                                //------
                                
                                NodeList listaArmas = doc.getElementsByTagName("Arma"+
                                						((Node)nameBarco.item(0)).getNodeValue().trim());
                                int totalArmas = listaArmas.getLength();

                                //CREO LAS ARMAS
                                Hashtable<Integer, Arma> hashArmas = new Hashtable<Integer, Arma>();
                                
                                for(int m=0; m<listaArmas.getLength() ; m++){

                                    Node primerArma = listaArmas.item(m);
                                    if(primerArma.getNodeType() == Node.ELEMENT_NODE){

                                        Element firstArmaElement = (Element)primerArma;
                                        //-------
                                        NodeList NombreArma = firstArmaElement.getElementsByTagName("NombreArma");
                                        primerAtributo = (Element)NombreArma.item(0);

                                        NodeList nameArma = primerAtributo.getChildNodes();
                                        String _nombreArma = nameArma.item(0).getNodeValue().trim();
                                        //-------
                                        NodeList LargoArma = firstArmaElement.getElementsByTagName("Largo");
                                        primerAtributo = (Element)LargoArma.item(0);

                                        NodeList large = primerAtributo.getChildNodes();
                                        int _largoArma = Integer.parseInt(large.item(0).getNodeValue().trim());

                                        //-------
                                        NodeList AnchoArma = firstArmaElement.getElementsByTagName("Ancho");
                                        primerAtributo = (Element)AnchoArma.item(0);

                                        NodeList wide = primerAtributo.getChildNodes();
                                        int _anchoArma = Integer.parseInt(wide.item(0).getNodeValue().trim());

                                        //-------

                                        NodeList AnguloMov = firstArmaElement.getElementsByTagName("AnguloMov");
                                        primerAtributo = (Element)AnguloMov.item(0);

                                        NodeList angulo = primerAtributo.getChildNodes();
                                        int _anguloMovimiento = Integer.parseInt(angulo.item(0).getNodeValue().trim());

                                        //-------
                                        NodeList AlcanceActual = firstArmaElement.getElementsByTagName("AlcanceActual");
                                        primerAtributo = (Element)AlcanceActual.item(0);

                                        NodeList alcance = primerAtributo.getChildNodes();
                                        int _alcanceActual = Integer.parseInt(alcance.item(0).getNodeValue().trim());

                                        //-------
                                        NodeList CantMunicionesActual = firstArmaElement.getElementsByTagName("CantMunicionesActual");
                                        primerAtributo = (Element)CantMunicionesActual.item(0);

                                        NodeList cantMuni = primerAtributo.getChildNodes();
                                        int _cantMunicionActual = Integer.parseInt(cantMuni.item(0).getNodeValue().trim());
                                        //-------
                                        
                                        NodeList DanioBlindaje = firstArmaElement.getElementsByTagName("DanioBlindaje");
                                        primerAtributo = (Element)DanioBlindaje.item(0);

                                        NodeList danioBlind = primerAtributo.getChildNodes();
                                        int _danioBlindaje = Integer.parseInt(danioBlind.item(0).getNodeValue().trim());

                                        //-------
                                        NodeList DanioVelocidad = firstArmaElement.getElementsByTagName("DanioVelocidad");
                                        primerAtributo = (Element)DanioVelocidad.item(0);

                                        NodeList danioVel = primerAtributo.getChildNodes();
                                        int _danioVelocidad = Integer.parseInt(danioVel.item(0).getNodeValue().trim());

                                        //-------
                                        NodeList IdTipoArma = firstArmaElement.getElementsByTagName("IdTipoArma");
                                        primerAtributo = (Element)IdTipoArma.item(0);

                                        NodeList idTipoArma = primerAtributo.getChildNodes();
                                        int _idTipoArma = Integer.parseInt(idTipoArma.item(0).getNodeValue().trim());
                                        
                                        //-------
                                        NodeList CoordX = firstArmaElement.getElementsByTagName("CoordX");
										primerAtributo = (Element) CoordX
												.item(0);

										NodeList coordX = primerAtributo
												.getChildNodes();
										int posArmaX = Integer
												.parseInt(coordX.item(0)
														.getNodeValue()
														.trim());

										// -------
										NodeList CoordY = firstArmaElement
												.getElementsByTagName("CoordY");
										primerAtributo = (Element) CoordY
												.item(0);

										NodeList coordY = primerAtributo
												.getChildNodes();
										int posArmaY = Integer
												.parseInt(coordY.item(0)
														.getNodeValue()
														.trim());
										// -------

										Coordenada _posicionArma = new Coordenada(
												posArmaX, posArmaY);
										NodeList DanioAlcance = firstArmaElement
												.getElementsByTagName("DanioAlcance");
										primerAtributo = (Element) DanioAlcance
												.item(0);

										NodeList danioAlcance = primerAtributo
												.getChildNodes();
										int danioArmaAlcance = Integer
												.parseInt(danioAlcance
														.item(0)
														.getNodeValue()
														.trim());

										// -------
										NodeList DanioCantMuniciones = firstArmaElement
												.getElementsByTagName("DanioCantMuniciones");
										primerAtributo = (Element) DanioCantMuniciones
												.item(0);

										NodeList danioCantMuni = primerAtributo
												.getChildNodes();
										int danioArmaCantMuni = Integer
												.parseInt(danioCantMuni
														.item(0)
														.getNodeValue()
														.trim());

										// -------
										NodeList DanioProAcierto = firstArmaElement
												.getElementsByTagName("DanioProAcierto");
										primerAtributo = (Element) DanioProAcierto
												.item(0);

										DanioArma _danioArmas = new DanioArma(
												danioArmaAlcance,
												danioArmaCantMuni);

										// -------
										Arma arma = new Arma(_idTipoArma);
										arma.setPosicion(_posicionArma);
										arma.setLargo(_largoArma);
										arma.setAncho(_anchoArma);
										arma.setNombre(_nombreArma);
										arma.setAnguloMovimiento(_anguloMovimiento);
										arma.setAlcanceActual(_alcanceActual);
										arma.setCantMunicionActual(_cantMunicionActual);
										arma.setDanioArmas(_danioArmas);
                                      arma.setDanioBlindaje(_danioBlindaje);
                                      arma.setDanioVelocidad(_danioVelocidad);
                                      hashArmas.put(_idTipoArma, arma);
                                    }//end of if clause
                                    
                                  Barco barco = new Barco(_nombre, juego.getNivelDificultad());
                                  barco.setIdTipoBarco(_idTipoBarco);
                                  barco.setLargo(_largo);
                                  barco.setAncho(_ancho);
                                  barco.setPosicion(_posicion.getCoordX(), _posicion.getCoordY());
                                  barco.setBlindajeActual(_blindajeActual);
                                  barco.setVelocidadActual(_velocidadActual);
                                  barco.setVida(_vida);
                                  barco.setNombre(_nombre);
                                  barco.setSentidoPosicionSinArmas(_sentidoPosicion);
                                  barco.setAreaVisibilidad(_areaVisibilidad);
                                  barco.setMovimientoHabilitado(_movimientoHabilitado);
                                  Iterator<Arma> it = hashArmas.values().iterator();
                                  while (it.hasNext()) {
                                	  barco.agregarArma(it.next());
                                  }
                                  bando.addBarco(barco);
                                }//end of for loop with s var
                            }//end of if clause
                        }//end of for loop with s var
                        Jugador jugador = new Jugador(_nombreJugador, _idiomaJugador, bando);
                        juego.setJugador(jugador);
                    }//end of if clause
                }//end of for loop with s var
            }//end of if clause
        }//end of for loop with s var
	}
}
